From: akw27@arcadians.cl.cam.ac.uk Date: Mon, 14 Mar 2005 08:59:23 +0000 (+0000) Subject: bitkeeper revision 1.1236.30.1 (4235526bwxkauxTaQRTxeJkFtQFn7Q) X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~17857^2~26^2~2^2~1 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=2859bf89844708db365c2e3e0f25cbb56f55237f;p=xen.git bitkeeper revision 1.1236.30.1 (4235526bwxkauxTaQRTxeJkFtQFn7Q) Fix unmapping of user-mapped foreign pages in blktap. Signed-off-by: andrew.warfield@cl.cam.ac.uk --- diff --git a/linux-2.6.10-xen-sparse/drivers/xen/blktap/blktap_datapath.c b/linux-2.6.10-xen-sparse/drivers/xen/blktap/blktap_datapath.c index e88c5629a6..a58e49fa09 100644 --- a/linux-2.6.10-xen-sparse/drivers/xen/blktap/blktap_datapath.c +++ b/linux-2.6.10-xen-sparse/drivers/xen/blktap/blktap_datapath.c @@ -77,7 +77,7 @@ void active_reqs_init(void) static inline unsigned long MAKE_ID(domid_t fe_dom, ACTIVE_RING_IDX idx) { - return ( (fe_dom << 16) | idx ); + return ( (fe_dom << 16) | MASK_ACTIVE_IDX(idx) ); } /*-----[ Ring helpers ]---------------------------------------------------*/ diff --git a/linux-2.6.10-xen-sparse/drivers/xen/blktap/blktap_userdev.c b/linux-2.6.10-xen-sparse/drivers/xen/blktap/blktap_userdev.c index 3cc307fddf..b503b1ec13 100644 --- a/linux-2.6.10-xen-sparse/drivers/xen/blktap/blktap_userdev.c +++ b/linux-2.6.10-xen-sparse/drivers/xen/blktap/blktap_userdev.c @@ -355,24 +355,6 @@ int blktap_write_be_ring(blkif_response_t *rsp) return 0; } -static void blktap_fast_flush_area(int idx, int nr_pages) -{ - multicall_entry_t mcl[MMAP_PAGES_PER_REQUEST]; - int i; - - for ( i = 0; i < nr_pages; i++ ) - { - mcl[i].op = __HYPERVISOR_update_va_mapping; - mcl[i].args[0] = MMAP_VADDR(idx, i); - mcl[i].args[1] = 0; - mcl[i].args[2] = 0; - } - - mcl[nr_pages-1].args[2] = UVMF_FLUSH_TLB; - if ( unlikely(HYPERVISOR_multicall(mcl, nr_pages) != 0) ) - BUG(); -} - static int blktap_read_fe_ring(void) { /* This is called to read responses from the UFE ring. */ @@ -398,7 +380,8 @@ static int blktap_read_fe_ring(void) DPRINTK("resp->fe_ring\n"); ar = lookup_active_req(ID_TO_IDX(resp_s->id)); blkif = ar->blkif; - blktap_fast_flush_area(ID_TO_IDX(resp_s->id), ar->nr_pages); + zap_page_range(blktap_vma, MMAP_VADDR(ID_TO_IDX(resp_s->id), 0), + ar->nr_pages << PAGE_SHIFT, NULL); write_resp_to_fe_ring(blkif, resp_s); kick_fe_domain(blkif); }